package bdd;

import beans.*;
import java.io.IOException;
import java.sql.*;
import java.util.ArrayList;

/**
 *
 * @author cdi207
 */
public class QueriesCatalogue {

    Connection cnt;

    public QueriesCatalogue() throws ClassNotFoundException, SQLException {
        cnt = ConnectBDD.getSingleton();
    }

    public ArrayList<CatAuteurs> ajouterAuteur(String nom, String prenom) throws SQLException, IOException {
        ArrayList<CatAuteurs> file = new ArrayList();



        CallableStatement cs = null;
        ResultSet res = null;
//        String ordre1="{call ps_afficherAuteurEnBase(?,?,?)}";
//        cs=cnt.prepareCall(ordre1);
//        cs.setString(1, nom);
//        cs.setString(2, prenom);
//        cs.registerOutParameter(3, java.sql.Types.INTEGER);
////        if(cs.registerOutParameter(3, java.sql.Types.INTEGER)>0)
////        {
////            
////        }

        String ordre2 = "{call ps_ajouterAuteur(?,?,?)}";

        cs = cnt.prepareCall(ordre2);
        cs.setString(1, nom);
        cs.setString(2, prenom);
        cs.registerOutParameter(3, java.sql.Types.INTEGER);

        res = cs.executeQuery();



        return file;
    }

    public ArrayList<CatAuteurs> listerTousAuteurs() throws SQLException, IOException {
        ArrayList<CatAuteurs> file = new ArrayList();

        int i = 1;



        CallableStatement cs = null;
        ResultSet res = null;
        String ordre = "{call ps_afficherAuteurs}";
        cs = cnt.prepareCall(ordre);
        res = cs.executeQuery();

        while (res.next()) {
            CatAuteurs tsAuteurs = new CatAuteurs();
            tsAuteurs.setAutId(res.getInt("AUT_ID"));
            tsAuteurs.setAutNom(res.getString("AUT_NOM"));
            tsAuteurs.setAutPrenom(res.getString("AUT_PRENOM"));
            file.add(tsAuteurs);
        }

        return file;

    }

    public int modifierAuteur(CatAuteurs auteur) throws SQLException {
        CallableStatement cst = cnt.prepareCall("{call ps_modifierAuteur(?,?,?,?,?,?,?)}");

        cst.setString(1, auteur.getAutNom());
        cst.setString(2, auteur.getAutPrenom());
        cst.setInt(3, auteur.getAutId());
        cst.registerOutParameter(4, java.sql.Types.INTEGER);
        cst.execute();
        int sortie = cst.getInt(4);
        return sortie;
    }

    public ArrayList<CatEditeurs> ajouterEditeur(String nom, String contact, String mail, String phone, String adresse) throws SQLException, IOException {
        ArrayList<CatEditeurs> file = new ArrayList();

        CallableStatement cs = null;
        ResultSet res = null;
        String ordre = "{call ps_ajouterEditeur(?,?,?,?,?,?)}";
        cs = cnt.prepareCall(ordre);

        cs.setString(1, nom);
        cs.setString(2, contact);
        cs.setString(3, mail);
        cs.setString(4, phone);
        cs.setString(5, adresse);
        cs.registerOutParameter(6, java.sql.Types.INTEGER);

        res = cs.executeQuery();



        return file;

    }

    public ArrayList<CatEditeurs> listerTousEditeurs() throws SQLException, IOException {
        ArrayList<CatEditeurs> file = new ArrayList();

        int i = 1;

        CallableStatement cs = null;
        ResultSet res = null;
        String ordre = "{call ps_afficherEditeurs}";
        cs = cnt.prepareCall(ordre);
        res = cs.executeQuery();

        while (res.next()) {
            CatEditeurs tsEditeurs = new CatEditeurs();
            tsEditeurs.setEdiId(res.getInt("EDI_ID"));
            tsEditeurs.setEdiNom(res.getString("EDI_NOM"));
            tsEditeurs.setEdiContact(res.getString("EDI_CONTACT"));
            tsEditeurs.setEdiMail(res.getString("EDI_MAIL"));
            tsEditeurs.setEdiPhone(res.getString("EDI_PHONE"));
            tsEditeurs.setEdiAdresse(res.getString("EDI_ADRESSE"));
            file.add(tsEditeurs);
        }

        return file;
    }

    public int modifierEditeur(CatEditeurs editeur) throws SQLException {
        CallableStatement cst = cnt.prepareCall("{call ps_modifierEditeur(?,?,?,?,?,?,?)}");

        cst.setString(1, editeur.getEdiNom());
        cst.setString(2, editeur.getEdiContact());
        cst.setString(3, editeur.getEdiMail());
        cst.setString(4, editeur.getEdiPhone());
        cst.setString(5, editeur.getEdiAdresse());
        cst.setInt(6, editeur.getEdiId());
        cst.registerOutParameter(7, java.sql.Types.INTEGER);
        cst.execute();
        int sortie = cst.getInt(7);
        return sortie;
    }

    public ArrayList<CatFournisseurs> ajouterFournisseur(String label, String phone, String adresse, String mail, String contact) throws SQLException, IOException {
        ArrayList<CatFournisseurs> file = new ArrayList();

        CallableStatement cs = null;
        ResultSet res = null;
        String ordre = "{call ps_ajouterFournisseur(?,?,?,?,?,?)}";
        cs = cnt.prepareCall(ordre);
        cs.setString(1, label);
        cs.setString(2, phone);
        cs.setString(3, adresse);
        cs.setString(4, mail);
        cs.setString(5, contact);
        cs.registerOutParameter(6, java.sql.Types.INTEGER);

        res = cs.executeQuery();

//        try 
//        {
//        cs=cnt.prepareCall(ordre);
//        res=cs.executeQuery();
//        }
//        catch (SQLException ex)
//        {
//                System.out.println(ex.getMessage());    
//        }

        return file;

    }

    public ArrayList<CatFournisseurs> listerTousFournisseurs() throws SQLException, IOException {
        ArrayList<CatFournisseurs> file = new ArrayList();

        int i = 1;

        CallableStatement cs = null;
        ResultSet res = null;
        String ordre = "{call ps_afficherFournisseurs}";
        cs = cnt.prepareCall(ordre);
        res = cs.executeQuery();

        while (res.next()) {
            CatFournisseurs tsFournisseurs = new CatFournisseurs();
            tsFournisseurs.setFouId(res.getInt("FOU_ID"));
            tsFournisseurs.setFouLabel(res.getString("FOU_LABEL"));
            tsFournisseurs.setFouPhone(res.getString("FOU_PHONE"));
            tsFournisseurs.setFouAdresse(res.getString("FOU_ADRESSE"));
            tsFournisseurs.setFouMail(res.getString("FOU_MAIL"));
            tsFournisseurs.setFouContact(res.getString("FOU_CONTACT"));
            file.add(tsFournisseurs);
        }

        return file;
    }

    public int modifierFournisseur(CatFournisseurs fournisseur) throws SQLException {

        CallableStatement cst = cnt.prepareCall("{call ps_modifierFournisseurs(?,?,?,?,?,?,?)}");

        cst.setString(1, fournisseur.getFouLabel());
        cst.setString(2, fournisseur.getFouPhone());
        cst.setString(3, fournisseur.getFouAdresse());
        cst.setString(4, fournisseur.getFouMail());
        cst.setString(5, fournisseur.getFouContact());
        cst.setInt(6, fournisseur.getFouId());
        cst.registerOutParameter(7, java.sql.Types.INTEGER);
        cst.execute();
        int sortie = cst.getInt(7);
        return sortie;

    }

    public ArrayList<CatGenres> ajouterGenre(String label) throws SQLException, IOException {
        ArrayList<CatGenres> file = new ArrayList();

        CallableStatement cs = null;
        ResultSet res = null;
        String ordre = "{call ps_ajouterGenre(?,?)}";
        cs = cnt.prepareCall(ordre);
        cs.setString(1, label);
        cs.registerOutParameter(2, java.sql.Types.INTEGER);

        res = cs.executeQuery();



        return file;

    }

    public ArrayList<CatGenres> listerTousGenres() throws SQLException, IOException {
        ArrayList<CatGenres> file = new ArrayList();

        int i = 1;

        CallableStatement cs = null;
        ResultSet res = null;
        String ordre = "{call ps_afficherGenres}";
        cs = cnt.prepareCall(ordre);
        res = cs.executeQuery();

        while (res.next()) {
            CatGenres tsGenres = new CatGenres();
            tsGenres.setGenId(res.getInt("GEN_ID"));
            tsGenres.setGenLabel(res.getString("GEN_LABEL"));
            file.add(tsGenres);
        }

        return file;
    }

    public int modifierGenre(CatGenres genre) throws SQLException {

        CallableStatement cst = cnt.prepareCall("{call ps_modifierGenre(?,?,?)}");

        cst.setString(1, genre.getGenLabel());
        cst.setInt(2, genre.getGenId());
        cst.registerOutParameter(3, java.sql.Types.INTEGER);
        cst.execute();
        int sortie = cst.getInt(3);
        return sortie;

    }

    public ArrayList<CatRecompenses> ajouterRecompense(String label) throws SQLException, IOException {
        ArrayList<CatRecompenses> file = new ArrayList();

        CallableStatement cs = null;
        ResultSet res = null;
        String ordre = "{call ps_ajouterRecompense(?,?)}";
        cs = cnt.prepareCall(ordre);
        cs.setString(1, label);
        cs.registerOutParameter(2, java.sql.Types.INTEGER);

        res = cs.executeQuery();



        return file;

    }

    public ArrayList<CatRecompenses> listerTousRecompenses() throws SQLException, IOException {
        ArrayList<CatRecompenses> file = new ArrayList();

        int i = 1;

        CallableStatement cs = null;
        ResultSet res = null;
        String ordre = "{call ps_afficherRecompenses}";
        cs = cnt.prepareCall(ordre);
        res = cs.executeQuery();

        while (res.next()) {
            CatRecompenses tsRecompenses = new CatRecompenses();
            tsRecompenses.setRecId(res.getInt("REC_ID"));
            tsRecompenses.setRecLabel(res.getString("REC_LABEL"));
            file.add(tsRecompenses);
        }

        return file;
    }

    public int modifierRecompense(CatRecompenses recompense) throws SQLException {
        CallableStatement cst = cnt.prepareCall("{call ps_modifierRecompense(?,?,?)}");

        cst.setString(1, recompense.getRecLabel());
        cst.setInt(2, recompense.getRecId());
        cst.registerOutParameter(3, java.sql.Types.INTEGER);
        cst.execute();
        int sortie = cst.getInt(3);
        return sortie;
    }

    public ArrayList<CatMots> ajouterMot(String label) throws SQLException, IOException {
        ArrayList<CatMots> file = new ArrayList();

        CallableStatement cs = null;
        ResultSet res = null;
        String ordre = "{call ps_ajouterMot (?,?)}";
        cs = cnt.prepareCall(ordre);
        cs.setString(1, label);
        cs.registerOutParameter(2, java.sql.Types.INTEGER);

        res = cs.executeQuery();



        return file;

    }

    public ArrayList<CatMots> listerTousMots() throws SQLException, IOException {
        ArrayList<CatMots> file = new ArrayList();

        int i = 1;

        CallableStatement cs = null;
        ResultSet res = null;
        String ordre = "{call ps_afficherMots}";
        cs = cnt.prepareCall(ordre);
        res = cs.executeQuery();

        while (res.next()) {
            CatMots tsMots = new CatMots();
            tsMots.setMotCleId(res.getInt("MOTCLE_ID"));
            tsMots.setMotLabel(res.getString("MOT_LABEL"));
            file.add(tsMots);
        }

        return file;
    }

    public int modifierMot(CatMots mot) throws SQLException {

        CallableStatement cst = cnt.prepareCall("{call ps_modifierMot(?,?,?)}");

        cst.setString(1, mot.getMotLabel());
        cst.setInt(2, mot.getMotCleId());
        cst.registerOutParameter(3, java.sql.Types.INTEGER);
        cst.execute();
        int sortie = cst.getInt(3);
        return sortie;

    }

//   public ArrayList afficherListeAuteurs() throws SQLException{
//          ArrayList<CatAuteurs> listeAuteurs =  new ArrayList();
//          CallableStatement statement = cnt.prepareCall("{call ps_afficherAuteurs}");
//          ResultSet rst = statement.executeQuery();
//          while(rst.next()){
//             CatAuteurs infosAuteur = new CatAuteurs();
//             infosAuteur.setAutId(rst.getInt("AUT_ID"));
//             infosAuteur.setAutNom(rst.getString("AUT_NOM"));
//             infosAuteur.setAutPrenom(rst.getString("AUT_PRENOM"));
//             listeAuteurs.add(infosAuteur);
//          }
//          return listeAuteurs;
//   } 
//   
//   public ArrayList afficherListeFournisseurs() throws SQLException{
//          ArrayList<CatFournisseurs> listeFournisseurs =  new ArrayList();
//          CallableStatement statement = cnt.prepareCall("{call ps_afficherFournisseurs}");
//          ResultSet rst = statement.executeQuery();
//          while(rst.next()){
//             CatFournisseurs infosFournisseur = new CatFournisseurs();
//             infosFournisseur.setFouId(rst.getInt("FOU_ID"));
//             infosFournisseur.setFouLabel(rst.getString("FOU_LABEL"));
//             infosFournisseur.setFouPhone(rst.getString("FOU_PHONE"));
//             infosFournisseur.setFouAdresse(rst.getString("FOU_ADRESSE"));
//             infosFournisseur.setFouMail(rst.getString("FOU_MAIL"));
//             infosFournisseur.setFouContact(rst.getString("FOU_CONTACT"));
//
//          }
//          return listeFournisseurs;  
//
//   }
//  
//   public int modifierFournisseur(){}
//   public ArrayList afficherListeMots() throws SQLException{
//          ArrayList<CatMots> listeMots =  new ArrayList();
//          CallableStatement statement = cnt.prepareCall("{call ps_afficherMots}");
//          ResultSet rst = statement.executeQuery();
//          while(rst.next()){
//             CatMots infosMots = new CatMots();
//             infosMots.setMotCleId(rst.getInt("MOTCLE_ID"));
//             infosMots.setMotLabel(rst.getString("MOT_LABEL"));
//
//          }
//          return listeMots;  
//  
//   }
//   public int modifierMot()
//   public ArrayList afficherListeRecompenses() throws SQLException{
//          ArrayList<CatRecompenses> listeRecompenses =  new ArrayList();
//          CallableStatement statement = cnt.prepareCall("{call ps_afficherRecompenses}");
//          ResultSet rst = statement.executeQuery();
//          while(rst.next()){
//             CatRecompenses infosRecompenses = new CatRecompenses();
//             infosRecompenses.setRecId(rst.getInt("REC_ID"));
//             infosRecompenses.setRecLabel("REC_LABEL");
//          }
//          return listeRecompenses;  
//   }
//           
//   public int modifierRecompense(){}
    public ArrayList afficherInfoSurEditeur() throws SQLException {
        ArrayList<CatEditeurs> listeEditeurs = new ArrayList();
        CallableStatement statement = cnt.prepareCall("{call ps_afficherEditeurs}");
        ResultSet rst = statement.executeQuery();
        while (rst.next()) {
            CatEditeurs infoSurEditeur = new CatEditeurs();
            infoSurEditeur.setEdiId(rst.getInt("EDI_ID"));
            infoSurEditeur.setEdiNom(rst.getString("EDI_NOM"));
            infoSurEditeur.setEdiContact(rst.getString("EDI_CONTACT"));
            infoSurEditeur.setEdiMail(rst.getString("EDI_MAIL"));
            infoSurEditeur.setEdiPhone(rst.getString("EDI_PHONE"));
            infoSurEditeur.setEdiAdresse(rst.getString("EDI_ADRESSE"));
            listeEditeurs.add(infoSurEditeur);
        }
        return listeEditeurs;

    }

    public ArrayList<CatLivres> listerTousLivres() throws SQLException, IOException {
        ArrayList<CatLivres> file = new ArrayList();

        int i = 1;

        CallableStatement cs = null;
        ResultSet res = null;
        String ordre = "{call ps_listerLivres}";
        cs = cnt.prepareCall(ordre);
        res = cs.executeQuery();

        while (res.next()) {
            CatLivres tsLivres = new CatLivres();
            tsLivres.setLivId(res.getInt("LIV_ID"));
            tsLivres.setLivIsbn(res.getString("LIV_ISBN"));
            tsLivres.setLivTitre(res.getString("LIV_TITRE"));
            tsLivres.setLivSousTitre(res.getString("LIV_SOUSTITRE"));
            file.add(tsLivres);
        }

        return file;
    }

    public ArrayList<CatLivres> afficherLivre(CatLivres livre) throws SQLException, IOException {
        ArrayList<CatLivres> file = new ArrayList();

        int i = 1;

        CallableStatement cs = null;
        ResultSet res = null;
        String ordre = "{call ps_afficherLivre(?)}";
        cs = cnt.prepareCall(ordre);
        cs.setObject(1, livre);

        res = cs.executeQuery();

        while (res.next()) {
            CatLivres tsLivres = new CatLivres();
            tsLivres.setLivId(res.getInt("LIV_ID"));
            tsLivres.setLivIsbn(res.getString("LIV_ISBN"));
            tsLivres.setLivTitre(res.getString("LIV_TITRE"));
            tsLivres.setLivSousTitre(res.getString("LIV_SOUSTITRE"));
            tsLivres.setLivPrixHt(res.getFloat("LIV_PRIXHT"));
            tsLivres.setLivResume(res.getString("LIV_RESUME"));
            tsLivres.setLivDatePublication(res.getString("LIV_DATEPUBLICATION"));
            tsLivres.setLivNbPages(res.getInt("LIV_NBPAGES"));
            tsLivres.setLivStock(res.getInt("LIV_STOCK"));
            file.add(tsLivres);
        }

        return file;
    }

    public ArrayList<CatLivres> ajouterLivre(CatLivres livre) throws SQLException, IOException {
        ArrayList<CatLivres> file = new ArrayList();

//            String req = "insert into T_LIVRES values('2', '', '1', '14', '1235469870254', 'Blanche', 'Colombe', '14', 'blablablablabla', '20061224 00:00:00.000', '325', '15')";
//                    
//                    
//                    
////                + events.getProId() + "','"
////                + events.getEveLabel() + "',"
////                + " convert(date,'" + events.getEveDebut() + "',111),"
////                + " convert(date,'" + events.getEveFin() + "',111))";
//
//        System.out.println(req);
//        Statement stm = cnt.createStatement();
//        int j=stm.executeUpdate(req);

        CallableStatement cs = null;
        ResultSet res = null;
        String ordre = "{call ps_ajouterLivre(?,?)}";
        cs = cnt.prepareCall(ordre);
        cs.setObject(1, livre);
        cs.registerOutParameter(2, java.sql.Types.INTEGER);
        res = cs.executeQuery();

        while (res.next()) {
            CatLivres tsLivres = new CatLivres();
            tsLivres.setLivId(res.getInt("LIV_ID"));
            tsLivres.setLivIsbn(res.getString("LIV_ISBN"));
            tsLivres.setLivTitre(res.getString("LIV_TITRE"));
            tsLivres.setLivSousTitre(res.getString("LIV_SOUSTITRE"));
            tsLivres.setLivPrixHt(res.getFloat("LIV_PRIXHT"));
            tsLivres.setLivResume(res.getString("LIV_RESUME"));
            tsLivres.setLivDatePublication(res.getString("LIV_DATEPUBLICATION"));
            tsLivres.setLivNbPages(res.getInt("LIV_NBPAGES"));
            tsLivres.setLivStock(res.getInt("LIV_STOCK"));
            file.add(tsLivres);
        }


        return file;
    }
}
